package com.orangesoft.tescherfriend.business.user.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;

import com.orangesoft.common.vo.ResultDTO;
import com.orangesoft.tescherfriend.business.user.entity.User;
import com.orangesoft.tescherfriend.business.user.dto.UserDTO;
import com.orangesoft.tescherfriend.business.user.service.UserService;

import javax.validation.Valid;

/**
 * 用户
 *
 * @author xhy
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Autowired
    private UserService userService;


    /**
     * 有查询条件，无分页，排序，对应的参数不传递将不做相应的处理
     *
     * @param userDTO
     * @return 根据条件返回数据，有分页参数则返回分页数据，无分页参数则返回查询的全部数据
     */
    @GetMapping(value = "/list")
    public ResultDTO list(UserDTO userDTO) {
        return ResultDTO.success(userService.findList(userDTO));
    }

    /**
     * 有查询条件，分页，排序，对应的参数不传递将不做相应的处理
     *
     * @param userDTO
     * @return 根据条件返回数据，有分页参数则返回分页数据，无分页参数则返回查询的全部数据
     */
    @GetMapping(value = "/page")
    public ResultDTO page(UserDTO userDTO) {
        return ResultDTO.success(userService.findPage(userDTO));
    }

    /**
     * 添加
     *
     * @param user
     * @return 返回添加过的数据
     */
    @PostMapping
    public ResultDTO create(@RequestBody @Valid User user) {
        return ResultDTO.success(userService.create(user));
    }

    /**
     * 更新,更新数据必须在业务层校验id是否为空
     *
     * @param user
     * @return 返回更新过的数据
     */
    @PutMapping
    public ResultDTO update(@RequestBody @Valid User user) {
        ResultDTO resultDTO = userService.update(user);
        if (resultDTO.getRet() == 0) {
            return ResultDTO.success();
        } else {
            return ResultDTO.fail(resultDTO.getMsg());
        }
    }

    /**
     * 根据id获取唯一记录
     *
     * @param id
     * @return 返回查询到的记录
     */
    @GetMapping(value = "/{id}")
    public ResultDTO view(@PathVariable Long id) {
        return ResultDTO.success(userService.findById(id));
    }

    /**
     * 根据id删除一条记录
     *
     * @param id
     * @return 返回是否成功
     */
    @DeleteMapping(value = "/{id}")
    public ResultDTO delete(@PathVariable Long id) {
        userService.deleteById(id);
        return ResultDTO.success();
    }

}
